/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;
import java.sql.*;
import LogicaNegocio.*;
import Fachada.Fachada;
import java.util.Vector;

/**
 *
 * @author GEMA
 */
public class DAOArticulo
{   Fachada fachada;

    public DAOArticulo()
    {
        fachada= new Fachada();
    }

    public int guardarArticulo(Articulo articulo)
    {
        String sql_guardar;
        sql_guardar="INSERT INTO Articulo(codigo_articulo, nombre_articulo, precio_venta_articulo,codigo_categoria, cc_empleado) VALUES" +
                "('" +articulo.getCodigoArticulo() + "','" + articulo.getNombreArticulo()+ "','" +articulo.getPrecioVentaArticulo() + "','" +
                 articulo.getCodigoCategoria()+"','"+articulo.getCcEmpleado()+"')";

        try
        {
            Connection conexion= fachada.ConexionBaseDatos();
            Statement sentencia=conexion.createStatement();
            int numFilas= sentencia.executeUpdate(sql_guardar);
            conexion.close();
            return numFilas;
        }
        catch(SQLException e)
        {
            System.out.println(e);
        }
        catch(Exception e)
        { System.out.println(e);
        }
        return -1;
    }

    public int modificarNombreArticulo(Articulo articulo)
    {
        String sql_modificar;
        sql_modificar = "UPDATE Articulo "+
                        "SET  nombre_articulo = '" + articulo.getNombreArticulo() + "' " +
                        "WHERE codigo_articulo = '" + articulo.getCodigoArticulo() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }


    public int modificarPrecioVentaArticulo(Articulo articulo)
    {
        String sql_modificar;
        sql_modificar = "UPDATE Articulo "+
                        "SET  precio_venta_articulo = '" + articulo.getPrecioVentaArticulo() + "' " +
                        "WHERE codigo_articulo = '" + articulo.getCodigoArticulo() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarCodigoCategoriaArticulo(Articulo articulo)
    {
        String sql_modificar;
        sql_modificar = "UPDATE Articulo "+
                        "SET  codigo_categoria = '" + articulo.getCodigoCategoria() + "' " +
                        "WHERE codigo_articulo = '" + articulo.getCodigoArticulo() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarCcEmpleadoArticulo(Articulo articulo)
    {
        String sql_modificar;
        sql_modificar = "UPDATE Articulo "+
                        "SET  cc_empleado = '" + articulo.getCcEmpleado() + "' " +
                        "WHERE codigo_articulo = '" + articulo.getCodigoArticulo() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    
    public int eliminarArticulo(String codigoArticulo)
    {
        String sql_eliminar;
        sql_eliminar = "DELETE FROM Articulo "+
                        "WHERE codigo_articulo = " + "'" +codigoArticulo + "'";

        try
        {
            Connection conexion = fachada.ConexionBaseDatos();
            Statement sentencia = conexion.createStatement();
            int numFilas = sentencia.executeUpdate(sql_eliminar);
            conexion.close();
            return numFilas;
        }
        catch(SQLException e)
        {System.out.println(e); }
        catch(Exception e)
        {System.out.println(e); }
        return -1;
    }

    public Vector <Vector> articulosCategoria()
    {
        String sql_select;
        sql_select = "SELECT C.codigo_categoria, nombre_categoria, COUNT(*) AS cantidadArticulos "+
                     "FROM Articulo A, Categoria C "+
                     "WHERE C.codigo_categoria = A.codigo_categoria "+
                     "GROUP BY C.codigo_categoria, nombre_categoria";

        Vector <Vector> articulos = new Vector <Vector>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                Vector <String> elArticulo = new Vector <String>();
                elArticulo.addElement(tabla.getString(1));
                elArticulo.addElement(tabla.getString(2));
                elArticulo.addElement(tabla.getString(3));
                articulos.addElement(elArticulo);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return articulos;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }
}
